﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using UVM_Utileria;

namespace UVM_Pretira_Facade
{
    public class LoggingFac
    {
        public LoggingFac()
        { }

        public List<Usuario> GetTransformacionUsuario()
        {
            List<Usuario> lstUsu = null;

            using (PretiraDBDataContext db = new PretiraDBDataContext(Utilerias.Decriptar(Utilerias.ConnectionString)))
            {
                var q = from a in db.GetUsuarioTransform()
                        select new Usuario()
                        {
                            UserName = a.CUENTA,
                            Password = a.pass,
                            Nombre = a.Nombre,
                            Email = a.mail == null ? "a " : a.mail,
                            Habilitado = true,
                            Role = new Role() { ID = 3 }
                        };

                if (q!= null)
                {
                    lstUsu = q.ToList<Usuario>();
                }
                else
                {
                    lstUsu = new List<Usuario>();
                }
            }

            return lstUsu;
        }

        public bool UpdateInsertUsuario(Usuario usr)
        {
            if (usr != null)
            {
                using (PretiraDBDataContext db = new PretiraDBDataContext(Utilerias.Decriptar(Utilerias.ConnectionString)))
                {
                    db.SPUpdateInsetUsuario(
                        usr.ID, 
                        usr.UserName, 
                        usr.Password, 
                        usr.Nombre, 
                        "", 
                        usr.Email, 
                        usr.Role.ID, 
                        usr.Habilitado);
                }
            }

            return true;
        }

        public bool LoggingValidate(Usuario usr)
        {
            bool breturn = false;
            using (PretiraDBDataContext db = new PretiraDBDataContext(Utilerias.Decriptar(Utilerias.ConnectionString)))
            {
                var ret = from a in db.SPLoggingValidate(usr.UserName, usr.Password)
                          select a.Column1;
                if (ret != null)
                {
                    List<int> lstint = ret.ToList<int>();
                    if (lstint.Count> 0)
                    {
                        int val = lstint.First<int>();
                        if (val == 1)
                        {
                            breturn = true;   
                        }
                    }
                }

            }
            

            return breturn;
        }

        public List<Usuario> GetUsuario(Usuario usr)
        {
            List<Usuario> lstusua = null;

            using (PretiraDBDataContext db = new PretiraDBDataContext(Utilerias.Decriptar(Utilerias.ConnectionString)))
            {
                var q = from a in db.SPGetUsuario(usr.ID, usr.UserName, true, true)
                        select new Usuario()
                        {
                            ID = a.ID,
                            UserName = a.UserName,
                            Password = a.Password,
                            Nombre = a.Nombre,
                            Email = a.Email == null ? "a " : a.Email,
                            Habilitado = a.Habilitado,
                            PLAN = a.Apellido,
                            Role = new Role() { ID = a.RolId}
                        };

                if (q!=null)
                {
                    lstusua = q.ToList<Usuario>();
                    foreach (var item in lstusua)
                    {
                        List<Role> rol = GetRol(item.Role);
                        if (rol.Count > 0)
                        {
                            item.Role = rol.First<Role>();
                        }
                    }
                }
                else
                {
                    lstusua = new List<Usuario>();
                }


            }

            return lstusua;
        }

        private List<Role> GetRol(Role role)
        {
            List<Role> lstrol = null;

            using (PretiraDBDataContext db = new PretiraDBDataContext(Utilerias.Decriptar(Utilerias.ConnectionString)))
            {
                var q = from a in db.SPGetRol(role.ID, role.Nombre, role.Habilitado)
                        select new Role()
                        {
                             Habilitado = a.Hab,
                             ID = a.ID,
                             Nombre = a.Nombre
                        };
                if (q!= null)
                {
                    lstrol = q.ToList<Role>();
                }
                else
                {
                    lstrol = new List<Role>();
                }
                
            }
            return lstrol;

        }
    }
}
